package com.itguigu.inversion.依赖传递的三种方式.接口方式传递;

@SuppressWarnings("NonAsciiCharacters")
public class Test {
    public static void main(String[] args) {

        小米智能电视 小米智能电视 = new 小米智能电视();
        华为智能电视 华为智能电视 = new 华为智能电视();

        万能遥控器 w = new 万能遥控器();
        w.open(小米智能电视);
        w.open(华为智能电视);

        w.close(小米智能电视);
        w.close(华为智能电视);
    }
}


interface IOpenAndClose {
    /**
     * 抽象一个open方法,可以打开一个Tv
     */
    void open(ITv iTv);

    void close(ITv iTv);
}

interface ITv {
    /**
     * 抽象一个Tv上的关闭方法
     */
    void close();

    void open();
}

@SuppressWarnings("NonAsciiCharacters")
class 小米智能电视 implements ITv {
    @Override
    public void close() {
        System.out.println("我是小米智能电视,我关闭了");
    }

    @Override
    public void open() {
        System.out.println("我是小米智能电视,我打开了");
    }
}

@SuppressWarnings("NonAsciiCharacters")
class 华为智能电视 implements ITv {

    @Override
    public void close() {
        System.out.println("我是华为智能电视,我关闭了");
    }

    @Override
    public void open() {
        System.out.println("我是华为智能电视,我打开了");
    }
}

@SuppressWarnings("NonAsciiCharacters")
class 万能遥控器 implements IOpenAndClose {
    /**
     * 抽象一个open方法,可以打开一个Tv,
     * 因为是依赖的接口,所以只要是一个实现了ITv的电视都能被关闭
     *
     * @param iTv 不知道哪个品牌的电视机
     */
    @Override
    public void open(ITv iTv) {
        iTv.open();
    }

    @Override
    public void close(ITv iTv) {
        iTv.close();
    }
}
